killer (Normal User)
Expert
Messaggi: 217
Iscritto: 19/07/2009
|
Salve a tutti..ho un problema gravissimo che non riesco a capire..
Modello logico:
Studenti(CodiceStudente, Cognome, Nome, Sesso)
Voti (ID, DataVerifica, Voto, CodiceStudente)
Provo a fare questa query:
Si vuole l'elenco dei voti per ciascuno studente ordinato per DataVerifica crescente
SELECT DataVerifica, Studenti.*, Voto
FROM Voti JOIN Studenti USING(CodiceStudente)
GROUP BY CodiceStudente
ORDER BY DataVerifica;
perke la visualizzazione è scorretta ?mi visualizza
DataVerifica | CodiceStudente |Nome | Cognome | Sesso | Voto
2010-09-27 5 w y M 7
2010-02-07 2 z K F 8
2011-02-01 7 j i F 4
2010-09-03 3 O P M 2
Perke non mi visualizza i voti per ciascuno studente?Cosa sbaglio e cosa dovrei correggere ?.. aiutatemi vi supplico...un grazie anticipatamente
Ultima modifica effettuata da killer il 16/12/2011 alle 19:29 |
|
nessuno (Normal User)
Guru^2
Messaggi: 6405
Iscritto: 03/01/2010
|
Perchè dici che non mostra i voti? I voti ci sono nell'output ...
Quale output ti aspetti?
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
killer (Normal User)
Expert
Messaggi: 217
Iscritto: 19/07/2009
|
L'output che dovrei aspettarmi è questo:
DataVerifica | CodiceStudente |Nome | Cognome | Sesso | Voto
2010-09-27 1 x xx M 7
2010-02-07 1 x xx M 8
2011-02-01 1 x xx M 4
2010-09-03 1 x xx M 2
2010-09-27 6 GG GG F 4
2010-02-07 6 GG GG F 4
2011-02-01 6 GG GG F 9
2010-09-03 6 GG GG F 3
Capisci? cioè per ogni studente mi deve dare l'elenco dei voti...
quindi riassumendo lo studente con codice '1' ha '4' voti (7,8,4,2) in date ....
e lo studente con codice '6' ha anche esso '4' voti(4,4,9,3)
Ultima modifica effettuata da killer il 16/12/2011 alle 19:33 |
|
nessuno (Normal User)
Guru^2
Messaggi: 6405
Iscritto: 03/01/2010
|
Probabilmente ti basta qualcosa del genere
SELECT Voti.DataVerifica, Studenti.*, Voti.Voto
FROM Studenti JOIN Voti USING(CodiceStudente)
ORDER BY Studenti.CodiceStudente, DataVerifica
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
killer (Normal User)
Expert
Messaggi: 217
Iscritto: 19/07/2009
|
uhm...esatto funziona alla perferzione pero voglio capire questo concetto...kome mai in qst caso la group by non funziona ? sn disperato non riesco a capire riusciresti a spiegarmi? grazie ancora
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6405
Iscritto: 03/01/2010
|
Non è che "non funziona" ma "non ti serve" la GROUP BY ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
killer (Normal User)
Expert
Messaggi: 217
Iscritto: 19/07/2009
|
si vabbe fino qua ci sono...ma non capisco il motivo per cui non serve la group by !! di solito non si usa la group by per i raggruppamenti !? e di regola in questo caso io sto facendo un raggruppamento......adesso che ci penso con questa query io visualizzo i codicestudente ordinati.. ma non devono essere ordinati..
la traccia mi chiede di eseguire un ordinamento solo per Data non per CodiceStudente
Ultima modifica effettuata da killer il 16/12/2011 alle 20:36 |
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Vorrei farti notare che la tua query viola una regola dello standard secondo cui, in presenza di clausole GroupBy, l'insieme degli attributi di Select deve essere un sottoinsieme di quelli usati per il raggruppamento, più eventualmente altri aggregati sugli stessi attributi.
Questo vincolo esprime la proprietà che in un gruppo non possono esserci campi di valore ambiguo. Infatti, una volta eseguita la GroupBy, ogni gruppo è come se fosse un unico record, perciò non può contenere più valori diversi nello stesso campo. Un gruppo non è l'insieme di più record: questa è un'astrazione usata solo in fase di calcolo del gruppo.
Ad esempio, volendo raggruppare secondo A:
Codice sorgente - presumibilmente Plain Text |
Non puoi selezionare A e B nella select, poiché il primo raggruppamento sarebbe ambiguo:
Codice sorgente - presumibilmente Plain Text |
Tuttavia puoi selezionare Sum(B), poiché il valore dell'aggregato è unico:
Codice sorgente - presumibilmente Plain Text |
|
|